﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Web.Http.Description;
using Box.BL;
using Box.Entities;
using Microsoft.Practices.Unity;

namespace Box.Api.Controllers
{
    public class PagosController : ApiController
    {
        [Dependency]
        public IPagosBL pagoService { get; set; }

        public IEnumerable<Pagos> Get()
        {
            return pagoService.GetFromPagosByCriterio("");
        }

        public IEnumerable<Pagos> Get(string criterio)
        {
            if (criterio != null && criterio != null)
            {
                return pagoService.GetAllFromPagos()
                    .Where(p => p.Proveedor.NombreEmpresa.ToUpper()
                        .Contains(criterio.ToUpper()));
            }
            else
            {
                return pagoService.GetAllFromPagos();
            }
        }

        [ResponseType(typeof(Pagos))]
        public IHttpActionResult Get(int id)
        {
            var pago = pagoService.GetFromPagosById(id);

            if (pago == null)
            {
                return NotFound();
            }
            return Ok(pago);
        }

        [ResponseType(typeof(Pagos))]
        public IHttpActionResult Post(Pagos pago)
        {
            pagoService.AddPago(pago);

            return CreatedAtRoute("DefaultApi", new { id = pago.Id }, pago);
        }

        [ResponseType(typeof(Pagos))]
        public IHttpActionResult Put(Pagos pago)
        {
            var existe = pagoService.ExistePago(pago.Id);

            if (!existe)
            {
                return NotFound();
            }
            pagoService.UpdatePago(pago);

            return Ok(pago);
        }

        public IHttpActionResult Delete(int id)
        {
            var existe = pagoService.ExistePago(id);

            if (!existe)
            {
                return NotFound();
            }
            pagoService.RemovePago(id);
            return Ok();
        }
    }
}
